package br.com.sfs.ejb.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="postagem")
@NamedQueries ({
	@NamedQuery ( name = "Postagem.consultarAssuntos", query = "Select distinct p.assunto from Postagem p"),
	@NamedQuery ( name = "Postagem.consultarPostagensPorAssunto", query = "Select p from Postagem p where p.assunto = :assunto order by p.dataPostagem desc"),
	@NamedQuery ( name = "Postagem.consultarTodasPostagens", query = "Select p from Postagem p"),
	@NamedQuery ( name = "Postagem.consultarPorTitulo", query = "Select p from Postagem p where p.titulo like :titulo"),
	@NamedQuery (name = "Postagem.consultarIdUsuario", query="Select p from postagem p, usuario u WHERE P.fk_IdUsuario = U.IdUsuario")
})
public class Postagem {
	
	@Id
	@Column(name="idPostagem")
	@SequenceGenerator(name="idPostagem", sequenceName="idPostagem", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private Long idPostagem;
	@Column(name="assunto", length=255)
	private String assunto;
	@Column(name="titulo", length=255)
	private String titulo;
	@Column(name="mensagem", length=255)
	private String mensagem;
	@Column(name="dataPostagem") 
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataPostagem;

	
	@ManyToOne(fetch = FetchType.EAGER)
	
	@JoinColumn(name="fk_idUsuario", insertable= true, updatable = true)
	@Fetch(FetchMode.JOIN) 
	@Cascade(CascadeType.SAVE_UPDATE)
	private Usuario usuario;

	/****************************************************************/

	public Long getIdPostagem() {
		return idPostagem;
	}
	public void setIdPostagem(Long idPostagem) {
		this.idPostagem = idPostagem;
	}
	public String getAssunto() {
		return assunto;
	}

	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getMensagem() {
		return mensagem;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
	
	public Date getDataPostagem() {
		return dataPostagem;
	}

	public void setDataPostagem(Date dataPostagem) {
		this.dataPostagem = dataPostagem;
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
}
